package co.com.sewebpoint.dao.imp;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import co.com.sewebpoint.dao.HibernateSessionFactory;
import co.com.sewebpoint.dao.SolicitudDAO;
import co.com.sewebpoint.dao.UsuarioDAO;
import co.com.sewebpoint.exception.DaoExceptionSE;
import co.com.sewebpoint.model.Solicitud;
import co.com.sewebpoint.model.Usuario;

/**
 * Clase que implementa la interfas UsuarioDAO
 * 
 * @author Esteban Hurtado y Sara Tamayo
 * @version 1.0
 * @see co.com.sewebpoint.dao.UsuarioDAO
 * 
 */

public class UsuarioDAOIMP extends HibernateDaoSupport implements UsuarioDAO {

	
	
	@Override
	public Usuario insert(Usuario usuario) throws DaoExceptionSE {
		
		Session session = null;		
		Transaction tx = null;
				
		try{
			session = getSession();
			
			 // metodo save para guardar un objeto en la Base de datos
			
			tx = session.beginTransaction();
			session.save(usuario);
			tx.commit();
			
		
		}catch(HibernateException e){
			
			throw new DaoExceptionSE(e);
		
		}finally{
			
			// cerrar la session 
			//session.close();
			
		}
		
		
		return usuario;
	}

	@Override
	public Usuario update(Usuario usuario) throws DaoExceptionSE {
		Session session = null;		
		Transaction tx = null;
		
		
		try{
			session = getSession();
			
			 // metodo save para guardar un objeto en la Base de datos
			
			tx = session.beginTransaction();
			session.update(usuario);
			tx.commit();
			
		
		}catch(HibernateException e){
			
			throw new DaoExceptionSE(e);
		
		}finally{
			
			// cerrar la session 
			session.close();
			
		}
		
		
		return usuario;
	}

	@Override
	public void delete(Usuario usuario) throws DaoExceptionSE {
		
		Session session = null;		
		Transaction tx = null;
		
		
		try{
			session = getSession();
			
			 // metodo save para guardar un objeto en la Base de datos
			
			tx = session.beginTransaction();
			usuario.setHabilitado(false);
			
			session.update(usuario);
			tx.commit();
			
		
		}catch(HibernateException e){
			
			throw new DaoExceptionSE(e);
		
		}finally{
			
			// cerrar la session 
			//session.close();
			
		}
	}
	
	
	@Override
	public List<Usuario> getAllItems() throws DaoExceptionSE {
		
		List<Usuario> usuarios = new ArrayList<Usuario>();
		Session session = null;
		
		try{
			session = getSession();
			// usado para hacer consultas a la base de datos
			
			Criteria criteria = session.createCriteria(Usuario.class);
			usuarios = criteria.list();
			
			
		}catch(HibernateException e){
			
			throw new DaoExceptionSE(e);
		}finally{
			
			// cerrar la session 
			//session.close();
			
		}
		
		return usuarios;
	}

	@Override
	public Usuario getKeyItem(String codUser) throws DaoExceptionSE {
		Usuario usuario = null;
		Session session=null;
		
		try{
			session = getSession();
			// usado para hacer consultas a la base de datos
			Criteria criteria = session.createCriteria(Usuario.class)
					.add(Restrictions.eq("usuario", codUser));// es el where en la sentencia SQL
			usuario =(Usuario) criteria.uniqueResult();
		
		
		}catch(HibernateException e){
			
			throw new DaoExceptionSE(e);
		}finally{
			
			// cerrar la session 
			//session.close();
			
		}
		
		return usuario;
	}

	

}
